home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / earcd / util / dir / managers.lha / Managers / Dir / Dir.calc < prev    next >
Text File  |  1997-01-15  |  7KB  |  308 lines

  1. G4C
  2.  
  3. ; dir.calc
  4.  
  5. ; A calculator, which uses ARexx to calculate & display the results.
  6. ; NOTE : ** means "to the power of"  i.e. 5**2 = 25
  7.  
  8. ; Other ARexx operators can be entered manually if needed.
  9.  
  10.  
  11. WINBIG   400 24 160 128 "RexxCalc"   ; Our window.
  12. WinType  11110001                ; It has all standard gadgets & bottom resize
  13. WINBACKGROUND PATTERN 0 2        ; Add a flashy background..
  14.  
  15. BOX  0 0 0 0 IN ICONDROP ; A window sized box, taking us way beyond "cool"
  16.  
  17. ;************************** GENERAL EVENTS ***********************************
  18.  
  19. xONLOAD                     ; Upon loading of the GUI
  20. setscreen dir.calc $lv_fmscreen
  21. rexxok = 0
  22. ifexists port AREXX                      ; check if rexx mast is running
  23.    ;
  24. else
  25.    ifexists file rexxmast
  26.        run 'rexxmast'
  27.        rexxok = 1
  28.    else
  29.        ifexists file sys:system/rexxmast
  30.             run 'sys:system/rexxmast'
  31.             rexxok = 1
  32.        endif
  33.    endif
  34.    if $rexxok = 1
  35.       wait port AREXX 100
  36.    else
  37.       ezreq 'RexxMast not found!' OK ""
  38.       guiquit dir.calc
  39.       stop
  40.    endif
  41. endif
  42. ifexists file sys:rexxc/rx                 ; check for rx & make resident
  43.    run 'resident sys:rexxc/rx pure add'
  44. else
  45.    ezreq 'Sys:rexxc/RX not found!' OK ""
  46.    guiquit dir.calc
  47.    stop
  48. endif 
  49. setvar calcvar ""           ; This is our main variable
  50. setgad dir.calc 2 HIDE      ; hide the ticker tape
  51. GUIOPEN dir.calc
  52. setvar mem  .mem1           ; These are the Memory variables
  53. setvar .mem1 0              ;     The ones starting with a full stop,
  54. setvar .mem2 0              ;     are env: variables
  55. setvar .mem3 0
  56. setvar .mem4 0
  57. setvar .mem5 0
  58. setvar membuff ""
  59. setvar .result "0"          ; somewhere to put the result (env: variable)
  60. setvar calcmode SMALL       ; small/big window
  61.  
  62. xonclose
  63. guiquit dir.calc
  64.  
  65. xOnQuit                     ; On quitting we delete the env variables, 
  66. delete env:.mem#?           ; so they don't linger in Env:
  67. delvar rexxok
  68. delvar calc#?
  69. delvar mem
  70. delvar membuff
  71. delvar .result
  72. run 'resident rx remove'
  73.  
  74. ;***************************** BUTTONS GALORE ! ******************************
  75. ; All these buttons do the same thing. They AppVar their number or letter
  76. ; to our main variable and redisplay it
  77.  
  78.  
  79. ;=======================> The Buttons for the plain numbers
  80.  
  81. xBUTTON 10 25 25 15 1
  82. gadkey 1                     ; Keyboard shortcut
  83. AppVar calcvar 1             ; AppVar the number to "calcvar"
  84. update dir.calc  1 $calcvar   ; and re-display it.
  85.  
  86. xBUTTON 36 25 25 15 2        ; same as above
  87. gadkey  2
  88. AppVar calcvar 2
  89. update dir.calc  1 $calcvar
  90.  
  91. xBUTTON 62 25 25 15 3
  92. gadkey  3
  93. AppVar calcvar 3
  94. update dir.calc  1 $calcvar
  95.  
  96. xBUTTON 10 41 25 15 4
  97. gadkey  4
  98. AppVar calcvar 4
  99. update dir.calc  1 $calcvar
  100.  
  101. xBUTTON 36 41 25 15 5
  102. gadkey  5
  103. AppVar calcvar 5
  104. update dir.calc  1 $calcvar
  105.  
  106. xBUTTON 62 41 25 15 6
  107. gadkey  6
  108. AppVar calcvar 6
  109. update dir.calc  1 $calcvar
  110.  
  111. xBUTTON 10 57 25 15 7
  112. gadkey  7
  113. AppVar calcvar 7
  114. update dir.calc  1 $calcvar
  115.  
  116. xBUTTON 36 57 25 15 8
  117. gadkey  8
  118. AppVar calcvar 8
  119. update dir.calc  1 $calcvar
  120.  
  121. xBUTTON 62 57 25 15 9
  122. gadkey  9
  123. AppVar calcvar 9
  124. update dir.calc  1 $calcvar
  125.  
  126. xBUTTON 10 73 25 15 0
  127. gadkey  0
  128. AppVar calcvar 0
  129. update dir.calc  1 $calcvar
  130.  
  131. xBUTTON 36 73 25 15 .
  132. gadkey  .
  133. AppVar calcvar .
  134. update dir.calc  1 $calcvar
  135.  
  136. xBUTTON 62 73 25 15 <        ; backspace
  137. gadkey #8
  138. cutvar calcvar CUT CHAR -1 ""   ; It will delete the last character of
  139. update dir.calc  1 $calcvar     ; "calcvar" and re-display it
  140.  
  141. ;=========================> The operators
  142.  
  143. xBUTTON 90 25 25 15 /
  144. gadkey  /
  145. AppVar calcvar /
  146. update dir.calc  1 $calcvar
  147.  
  148. xBUTTON 90 41 25 15 *       ; hit twice for square
  149. gadkey  *
  150. AppVar calcvar *
  151. update dir.calc  1 $calcvar
  152.  
  153. xBUTTON 90 57 25 15 -
  154. gadkey  -
  155. AppVar calcvar -
  156. update dir.calc  1 $calcvar
  157.  
  158. xBUTTON 90 73 25 15 +
  159. gadkey  +
  160. AppVar calcvar +
  161. update dir.calc  1 $calcvar
  162.  
  163. ;------------- right most bank
  164.  
  165. xBUTTON 116 25 35 15 (
  166. gadkey  (
  167. AppVar calcvar (
  168. update dir.calc  1 $calcvar
  169.  
  170. xBUTTON 116 41 35 15 )
  171. gadkey  )
  172. AppVar calcvar )
  173. update dir.calc  1 $calcvar
  174.  
  175. xBUTTON 116 57 35 15 CLR       ; Clear
  176. gadkey #127
  177. update dir.calc  1 0
  178. setvar calcvar ""
  179. if $calcmode = BIG                ; update ticker tape
  180.    LVAdd dir.calc 2 '** Clear **'
  181. endif
  182.  
  183. xBUTTON 116 73 35 15 =
  184. gadkey #13
  185. gosub dir.calc calculate        ; GoSub the routine which does the calculation
  186.  
  187.  
  188. ;===========================> This is our display panel. - Note it's
  189. ; a xTEXTin type gadget, so we can enter a calculation directly into it.
  190.  
  191. xTEXTIN 10 5 140 18 "" calcvar 0 512
  192. GADID 1
  193. gosub dir.calc calculate        ; GoSub the routine which does the calculation
  194.  
  195.  
  196. ;===================> routine to calculate & display result
  197.  
  198. xROUTINE calculate
  199. if $calcvar > ""                                         ; If there is an entry
  200.    if $calcmode = BIG                ; update ticker tape
  201.       LVAdd dir.calc 2 '$calcvar'
  202.    endif
  203.    cli "rx 'say >env:.result $calcvar'"
  204.    update dir.calc  1  $.result      ; and display the answer EVAL returned
  205.    setvar calcvar $.result           ; We set "calcvar" to the result
  206.    if $calcmode = BIG                ; update ticker tape
  207.       LVAdd dir.calc 2 '=> $calcvar'
  208.    endif
  209.    if $calcvar = 0 
  210.       setvar calcvar ""              ; and if it's 0, we empty it (looks nicer)
  211.    endif
  212. endif 
  213.  
  214.  
  215. ;***************************** MEMORIES **************************************
  216.  
  217. ; If you look at the following code carefully, you will see that we
  218. ; need a variable within a variable. 
  219. ; We use "membuff" to construct such a variable.
  220.  
  221. ;=======================> Memories display panel
  222.  
  223. xTEXTIN 10 90 140 16 "" $mem 0 30
  224. GadID 5
  225.  
  226. ;=======================> Memories cycler
  227.  
  228. xCycler 10 108 60 15 "" mem
  229. Cstr "M1" .mem1
  230. Cstr "M2" .mem2
  231. Cstr "M3" .mem3
  232. Cstr "M4" .mem4
  233. Cstr "M5" .mem5
  234. setvar membuff "\$$mem"    ; This means set membuff to $ + whatever is in "mem"
  235. update dir.calc 5 $membuff  ; so that it points to the correct variable
  236.  
  237. ;=======================> Memory IN/OUT
  238.  
  239. xButton 70 108 20 15 I         ; These buttons do the usual MEM in/out/+/-
  240. SetVar $mem $calcvar           ; stuff that calculators do.
  241. setvar membuff "\$$mem"
  242. update dir.calc 5 $membuff
  243.  
  244. xButton 90 108 20 15 O
  245. setvar membuff "\$$mem"
  246. AppVar calcvar $membuff
  247. update dir.calc 1 $calcvar
  248.  
  249. xButton 110 108 20 15 +
  250. setvar membuff "\$$mem"
  251. cli "rx 'say >env:$mem $calcvar + $membuff'"
  252. setvar membuff "\$$mem"
  253. update dir.calc 5 $membuff
  254.  
  255. xButton 130 108 20 15 -
  256. setvar membuff "\$$mem"
  257. cli "rx 'say >env:$mem $membuff - $calcvar'"
  258. setvar membuff "\$$mem"
  259. update dir.calc 5 $membuff
  260.  
  261.  
  262. ;***************************** Ticker Tape **********************************
  263.  
  264. ; Here we expand the window to include a listview for the ticker tape
  265. ; This is done on clicking of the Right Mouse Button
  266.  
  267. xOnRMB
  268. if $calcmode = SMALL
  269.    calcmode = BIG
  270.    changegad dir.calc 0 -1 -1 320 128 ""
  271.    setgad dir.calc 2 SHOW
  272. else
  273.    calcmode = SMALL
  274.    lvclear dir.calc 2
  275.    changegad dir.calc 0 -1 -1 160 128 ""
  276.    setgad dir.calc 2 HIDE
  277. endif
  278. redraw dir.calc
  279.  
  280. ;---- This is the listview that will show the results
  281. ;     update main calc pannel according to lv line clicked
  282.  
  283. xListview 155 5 158 123 "" calc.lv "" 10 TXT
  284. gadid 2
  285. cutvar calc.lv copy char 3 calc.3
  286. if $calc.3 = '** '
  287.    calcvar = 0
  288. else
  289.    if $calc.3 = '=> '
  290.       cutvar calc.lv cut char 3 ""
  291.       calcvar = $calc.lv
  292.    else
  293.       calcvar = $calc.lv
  294.    endif
  295. endif
  296. update dir.calc 1 $calcvar
  297. if $calcvar = 0
  298.    calcvar = ''
  299. endif
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.